/*
 * @Author: long
 * @Date: 2021-01-07 18:28:14
 * @LastEditTime: 2021-10-20 14:54:20
 * @LastEditors: Please set LastEditors
 * @Description: 全局路由钩子（权限控制）
 * @FilePath: \tracking-Pluse:\hjimi\人脸\html\face-recognition-useCase\src\permission.js
 */
import router from './router'
import store from './store'
import { message } from 'ant-design-vue'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken } from '@/utils/auth'
// import { asyncRoutes } from '@/router'
// import getPageTitle from '@/utils/get-page-title'

NProgress.configure({ showSpinner: false }) // 加载条配置

const whiteList = ['/login', '/reg', '/explain','/regSuccess', '/auth-redirect'] // 无需重定向白名单

router.beforeEach(async(to, from, next) => {
  
document.title = `${to.meta.title ?? '数据服务'}_智能云服务平台_人脸辨识云-华捷艾米科技有限公司`
  
NProgress.start()

// 设置页标签标题
//  document.title = getPageTitle(to.meta.title)

// 确认用户是否已登录
  const hasToken = getToken()

  if (hasToken) {
    if (to.path === '/login') { // 若登陆去主页
      next({ path: '/' })
      NProgress.done()
    } else {
      // next(),   router.addRoutes(await store.dispatch('permission/generateRoutes',[1]))  // 免登陆
      
      // 通过getInfo判断用户是否获得了权限角色
      const hasRoles = store.getters.roles && store.getters.roles.length > 0
      if (hasRoles) {
        next()
      } else {
        try {
          
 //获取用户信息
//注意:role必须是一个字符串数组!例如:['admin']或['developer', 'editor']
          let { category } = await store.dispatch('user/getInfo')
          let roles = await new Promise((resolve) => {
            if(category) {
              resolve(store.getters.roles)
            }
          })
          console.log('权限id', roles)
          var accessRoutes = await store.dispatch('permission/generateRoutes', roles) //根据角色生成可访问路由图
              router.addRoutes(accessRoutes) // 动态添加可访问路由

//点击方法，以确保地址路由是完整的
 //设置replace: true，这样导航就不会留下历史记录
          next({ ...to, replace: true })
        } catch (error) {
          
// 删除令牌，然后转到登录页面重新登录
          await store.dispatch('user/resetToken')
          message.error(error || 'Has Error')
          next(`/login?redirect=${to.path}`)
          NProgress.done()
        }
      }
    }
  } else {

// 是否有token
    if (whiteList.indexOf(to.path) !== -1) {
      
// 在免登录白名单中，直接进入
      next()
    } else {
      
// 其他没有访问权限的页面被重定向到登录页面
      next(`/login?redirect=${to.path}`)
      NProgress.done()
    }
  }
})

// 加载条
router.afterEach(() => {
  NProgress.done()
})

export { whiteList as whiteListes }